/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;


import io.MotoCuotaDTO;
import java.sql.*;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Acer
 */
public class MySQLMotoCuotaDAO {
   /**
     * Este metodo devuelve una lista de todas las ventas que sean de un determinado tipo
     * este tipo puede ser Repuestos o Services 
     * @param fecha
     * @param tipo
     * @return
     * @throws DAOException 
     */ 
     
/**
     * este metodo relaiza un listado de todas las cuotas de moto de una 
     * determinada fecha
     * @param fecha
     * @return
     * @throws DAOException 
     */
   public ArrayList<MotoCuotaDTO> listarMotoCuota(Date fecha) throws DAOException{
        Connection conexion = null;
        try {
           conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
           Statement stat = conexion.createStatement();
           //ResultSet rs = stat.executeQuery("select idCuota, montoPagado, fechaPago, monto, plan.idPlan, idCliente, nombre, p.observaciones, marca, modelo FROM pago p, cuota, plan, venta, persona, moto WHERE p.idcuota = cuota.id && cuota.idPlan = plan.idPlan && plan.idVenta = venta.id && venta.idCliente = persona.id && moto.idVenta = venta.id and fechaPago= '"+fecha+"'");
           ResultSet rs = stat.executeQuery("select montoPagado, monto, nombre FROM pago p, cuota, plan, venta, persona, moto WHERE p.idcuota = cuota.id && cuota.idPlan = plan.idPlan && plan.idVenta = venta.id && venta.idCliente = persona.id && moto.idVenta = venta.id and fechaPago= '"+fecha+"'"); 
           ArrayList<MotoCuotaDTO> listaMotoCuota = new ArrayList();
              while (rs.next()) {//(double montoPagado, double montoCuota, String cliente)
                  MotoCuotaDTO motoCuota = new MotoCuotaDTO(Double.parseDouble(rs.getString("montoPagado")) ,Double.parseDouble(rs.getString("monto")) , rs.getString("nombre"));
                  listaMotoCuota.add(motoCuota);
                }
             rs.close();
            return listaMotoCuota;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos Motoooo", e);
        }
        finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
   
   /**
    * este metodo calcula el total de las cuotas de moto de una fecha determinada
    * @param fecha
    * @return
    * @throws DAOException 
    */
    public double totalCuotasMotoServicesRepuestos(Date fecha, String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select montoPagado from pago,cuota,plan,venta where pago.idCuota=cuota.id and cuota.idPlan=plan.idPlan and plan.idVenta=venta.id and fechaPago ='"+fecha+"' && tipo='"+tipo+"'");
            double totalCuota = 0.0;
            while (rs.next()) {
               totalCuota = totalCuota + rs.getDouble("montoPagado");
            }
            rs.close();
            return totalCuota;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos Moto", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
   /**
     * este emtodo realiza una busqueda de todas las cuotas de motos que coincidan con
     * la cuota de moto que se le pasa como parametro
     * @param motoCuota
     * @return
     * @throws DAOException 
     */ 
    public ArrayList<MotoCuotaDTO> buscarMotoCuota(MotoCuotaDTO motoCuota) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select idCuota, montoPagado, fechaPago, monto, plan.idPlan, idCliente, nombre, pago.observaciones, marca,modelo from pago, cuota, plan, venta, persona, moto where pago.idcuota = cuota.id && cuota.idPlan = plan.idPlan && plan.idVenta = venta.id && venta.idCliente = persona.id && moto.idVenta = venta.id and lower(nombre) like lower('%"+ motoCuota.getCliente() + "%')and lower(pago.observaciones) like lower('%" + motoCuota.getObservaciones() + "%')and lower(fechaPago) like lower('%" + motoCuota.getFechaPago() + "%')");
            ArrayList<MotoCuotaDTO> lista = new ArrayList();
            while (rs.next()) {
               MotoCuotaDTO moto = new MotoCuotaDTO(Double.parseDouble(rs.getString("montoPagado")),Double.parseDouble(rs.getString("monto")),rs.getString("pago.observaciones"),Date.valueOf(rs.getString("fechaPago")),rs.getString("nombre"),rs.getString("marca"),rs.getString("modelo"));
               lista.add(moto);
            }
            
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos", e);  
  } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
    
    
}
